#ifndef _DRAGDATALOADER_H_
#define _DRAGDATALOADER_H_
#include <memory>
#include <functional>

namespace SEngine
{
    class DragDataLoader
    {
    public:
        static DragDataLoader & GetInstance();

        template<typename T>
        void Set(T & t) {
            if (m_data) {
                Done();
            }
            m_data = (void*)(new T(t)); 
        }

        template<typename T>
        void Get(std::function<void(T*)> && fn) {
            fn((T*)m_data);
            Done();
        }

        bool IsDragging() {
            return m_data;
        }

        void Done() {
            delete m_data;
            m_data = nullptr;
        }

        void * Ptr() {
            return m_data;
        }

    private:
        void * m_data;
    };
} // namespace SEngine


#endif